package bintree.leetcode;

/**
 * @Author: yuisama
 * @Date: 2022/9/28 10:59
 * @Description:翻转二叉树
 */
public class Num226_InvertTree {
    // 遍历法
//    public TreeNode invertTree(TreeNode root) {
//        traverse(root);
//        return root;
//    }
//    // 每当遍历到一个节点，就交换他的左右孩子
//    public void traverse(TreeNode root) {
//        // base case
//        if (root == null) {
//            return;
//        }
//        TreeNode left = root.left;
//        root.left = root.right;
//        root.right = left;
//        // 继续处理左右子树
//        traverse(root.left);
//        traverse(root.right);
//    }
    // 分解
    // 传入一颗二叉树的根节点root，就能将左右子树翻转，返回翻转后的树根
    public TreeNode invertTree(TreeNode root) {
        // base case
        if (root == null) {
            return root;
        }
        // 先将左右子树翻转好
        root.left = invertTree(root.left);
        root.right = invertTree(root.right);
        // 再将当前树根的左右子树交换
        TreeNode left = root.left;
        root.left = root.right;
        root.right = left;
        // 返回处理后的树根
        return root;
    }
}
